﻿package com.eitb.programas.olentzero09{
	import flash.geom.*;
	import flash.events.*;
	import com.eitb.util.logging.*;
	import com.eitb.literales.*;
	import com.eitb.programas.olentzero09.objetos.*;
	import com.eitb.programas.olentzero09.events.*;

	public class ModeloOlentzero implements IControladorOlentzero {
		private var vJuego:IVistaJuego;
		private var vOlentzero:IVistaOlentzero;

		private var limites:Object;
		private var velocidadX:Number;
		private var velocidadY:Number;
		private var aceleracionY:Number;
		private var xMouse:Number;
		private var yMouse:Number;
		private var x:Number;
		private var y:Number;
		private var tiempo:Number;
		private var saltando:Boolean;

		public function ModeloOlentzero():void {
			this.aceleracionY=-.25;
			this.velocidadX=0;
			this.velocidadY=0;
			this.xMouse=0;
			this.yMouse=0;
			this.x=0;
			this.y=0;
			this.tiempo=0;
			this.saltando=false;
		}

		// INIT COMPONENTES
		public function initVista(vOlentzero:IVistaOlentzero):void {
			this.vOlentzero=vOlentzero;
		}
		public function initVistaJuego(vJuego:IVistaJuego):void {
			this.vJuego=vJuego;
		}
		public function initLimites(limites:Object):void {
			this.limites=limites;
		}
		public function initPosicion(posicion:Point):void {
			this.vOlentzero.setX(posicion.x);
			this.vOlentzero.setY(posicion.y);
		}
		// INIT COMPONENTES

		// INIT PARAMETROS
		// INIT PARAMETROS

		// IControlador
		public function onEnterFrame(evt:Event):void {
			this.x=this.vOlentzero.getOlentzeroX();
			this.y=this.vOlentzero.getOlentzeroY();
			this.xMouse=this.vOlentzero.getMouseX();
			this.yMouse=this.vOlentzero.getMouseY();
			var espacioY:Number=this.velocidadY+this.aceleracionY;
			var velocidadY:Number=espacioY;
			var aceleracionX:Number = (this.xMouse - this.x) / 500;
			var espacioX:Number=this.velocidadX+aceleracionX;
			var velocidadX:Number=espacioX;
			this.velocidadX=velocidadX*0.9;


			this.vOlentzero.moveX(espacioX);
			this.vOlentzero.moveY(espacioY);
			this.vOlentzero.setInBounds(this.limites);
			this.caer();
			this.doColision();
			this.vOlentzero.mira(this.velocidadX);
			this.vOlentzero.accion(this.velocidadX);
		}

		public function onMouseDown(evt:MouseEvent):void {
			if (! this.saltando) {
				this.saltando=true;
				this.aceleracionY=-8;
			}
		}

		public function finalize():void {
			this.vOlentzero.finalize();
		}
		// IControlador
		private function caer():void {
			this.aceleracionY+=.5;
			this.saltando = !(this.y == limites.yMax);
		}

		private function doColision():void {
			for (var i:int = this.vJuego.getNumChilds() -1; i != 1; i--) {
				var object:* =this.vJuego.getChildAt(i);
				if (this.vOlentzero.getZonaColision().hitTestObject(object)) {
					try {
						object.colision();
					} catch (error:Error) {
					}
				}
			}
		}
	}
}